package com.gjy.scala.flow

import scala.util.control.Breaks.{break, breakable}

/***
 * package chapter4
 *
 * import scala.util.control.Breaks.{break, breakable}
 *
 * object Demo1_process_control {
 * def main(args: Array[String]): Unit = {
 * //    ifelse()
 * //    forloop()
 * //    whileloop()
 * //    brakeMethod()
 * continueMethod()
 *
 * /**
 * * 比较少用
 * */
 * def continueMethod(): Unit = {
 *
 * for (i <- 1 to 10) {
 * breakable {
 * if (i == 5) {
 * println("这里相当于被continued了，不会输出i=5")
 * break()
 * }
 * println(s"i=$i")
 * }
 * }
 *
 * println("程序继续运行")
 *
 * }
 *
 * def brakeMethod(): Unit = {
 * breakable {
 * for (i <- 1 to 10) {
 * println(s"i=$i")
 * if (i == 5) {
 * break()
 * }
 * }
 *
 * }
 *
 * println("程序继续运行")
 *
 *
 * }
 *
 * def whileloop(): Unit = {
 * var a: Int = 10
 * while (a >= 1) {
 * println(s"a=$a")
 * a -= 2
 * }
 *
 * val b: Int = 0
 * // do-while：不管满不满足循环条件，都会至少执行一次循环体
 * do {
 * println(s"b=$b")
 * } while (b > 0)
 *
 * }
 *
 * def forloop(): Unit = {
 * // 1. 范围遍历
 * for (i <- 1 to 10) {
 * println(i + " hello world")
 * }
 * println("=====1. 范围遍历=====")
 * // 本质：1这个Int调用了to方法
 * // 1<= i <=10
 * for (i: Int <- 1.to(10)) {
 * println(i + " hello world")
 * }
 *
 * println("==========")
 * // 1<= i <10 ，意思就是不包含10
 * for (i <- 1.until(10)) {
 * println(i + " hello world")
 * }
 *
 * println("====2. 集合遍历======")
 * // 2. 集合遍历
 * for (i <- List(12, 23, 34)) {
 * println(i + " hello world")
 * }
 * for (i <- Array(12, 23, 34)) {
 * println(i + " hello world")
 * }
 *
 * println("====3. 循环守卫======")
 * // 3. 循环守卫
 * for (i <- 1 to 10) {
 * if (i != 5) { //相当于跳过5
 * println(i)
 * }
 * }
 *
 * // 意思是  i!=5时，才会进入循环体
 * for (i <- 1 to 10 if i != 5) {
 * println(i)
 * }
 *
 * println("====4. 循环步长=====")
 * // 4. 循环步长
 * for (i <- 1 to 10 by 2) {
 * println(i)
 * }
 * println("============")
 * for (i <- 10 to 1 by -2) {
 * println(i)
 * }
 *
 * // 5. 循环嵌套
 * println("====5. 循环嵌套=====")
 * for (i <- 1 to 3) {
 * for (j <- 1 to 3) {
 * println("i = " + i + ", j = " + j)
 * }
 * }
 * // 可以写成：
 * println("------------------")
 * for (i <- 1 to 3; j <- 1 to 3) {
 * println("i = " + i + ", j = " + j)
 * }
 *
 *
 * // 6. 循环引入变量
 * println("====6. 循环引入变量=====")
 * for (i <- 1 to 3) {
 * val j = 3 - i
 * println(s"i=$i,j=$j")
 * }
 * println("------------------")
 * for (i <- 1 to 3; j = 3 - i) {
 * println(s"i=$i,j=$j")
 * }
 *
 * println("------------------")
 * //还可以写成：
 * for {
 * i <- 1 to 3
 * j = 3 - i
 * } {
 * println(s"i=$i,j=$j")
 * }
 * }
 *
 * def ifelse(): Unit = {
 * var filename: String = "default.txt"
 * // 1. 单分支，只有if的情况
 * if (!args.isEmpty) {
 * filename = args(0)
 * }
 *
 * // 2. 双分支
 * val age: Int = 18
 * if (age >= 18) {
 * println("成年人")
 * } else {
 * println("未成年")
 * }
 *
 * // 3. 多分支
 * if (age <= 6) {
 * println("童年")
 * } else if (age < 18) {
 * println("青少年")
 * } else if (age < 35) {
 * println("青年")
 * } else if (age < 65) {
 * println("中年")
 * } else {
 * println("老年")
 * }
 * }
 * }
 * }
 */
object LoopControl {
  def main(args: Array[String]): Unit = {
    // 使用 breakable 和 break 实现类似 break 的功能
    breakable {
      for (i <- 1 to 10) {
        if (i == 5) {
          println("这里相当于被 continued 了，不会输出 i=5")
          break() // 中断循环
        } else {
          println(s"i=$i")
        }
      }
    }

    //1.循环遍历
    println("=====1. 循环遍历=====")
    for (i <- 1 to 10) {
      println(s"i=$i")
    }
    for (i <- 1.until(10)) {
      println(s"i=$i")
    }
    //2. 集合遍历
    println("=====2. 集合遍历=====")
    for (i <- List(12, 23, 34)) {
      println(i + " hello world")
    }
    // 3. 循环守卫
    println("=====3. 循环守卫=====")
    for (i <- 1 to 10) {
      if (i != 5) { //相当于跳过5
        println(i)
      }
    }
    // 意思是  i!=5时，才会进入循环体
    for (i <- 1 to 10 if i!= 5) {
      println(i)
    }
    // 4. 循环步长
    println("=====4. 循环步长=====")
    for (i <- 1 to 10 by 2) {
      println(i)
    }
    println("============")
    for (i <- 10 to 1 by -2) {
      println(i)
    }
    // 5. 循环嵌套
    println("====5. 循环嵌套=====")
    for (i <- 1 to 3) {
      for (j <- 1 to 3) {
        println("i = " + i + ", j = " + j)
      }
    }
    // 可以写成：
    println("------------------")
    for (i <- 1 to 3; j <- 1 to 3) {
      println("i = " + i + ", j = " + j)
    }
    // 6. 循环引入变量
    println("====6. 循环引入变量=====")
    for (i <- 1 to 3) {
      val j = 3 - i
      println(s"i=$i,j=$j")
    }
    println("------------------")

    for (i <- 1 to 3; j = 3 - i) {
      println(s"i=$i,j=$j")
    }


  }
}
